{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\0.neg\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np \n",
    "import matplotlib as mpl  \n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=!pip list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy             2.1.3\n",
      "matplotlib        3.9.2\n",
      "matplotlib-inline 0.1.7\n"
     ]
    }
   ],
   "source": [
    "for item in a:\n",
    "    if 'numpy' in item:\n",
    "        print(item)\n",
    "for item in a:\n",
    "    if 'matplotlib' in item:\n",
    "        print(item)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f41efef2e0>,\n",
       " <matplotlib.lines.Line2D at 0x1f41efed5d0>]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(0,100*np.pi)\n",
    "a=1\n",
    "plt.plot(x,np.sin(8*x+np.pi/2),x,np.cos(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "请输入一个成绩，并判断成绩等级。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"246pt\" height=\"279pt\"\n",
       " viewBox=\"0.00 0.00 245.57 278.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 274.5)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-274.5 241.57,-274.5 241.57,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"117.57\" cy=\"-252.5\" rx=\"28.32\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"117.57\" y=\"-247.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"117.57\" cy=\"-179.5\" rx=\"48.28\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"117.57\" y=\"-174.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Input=&gt;X</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M117.57,-234.31C117.57,-226.73 117.57,-217.6 117.57,-209.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"121.07,-209.04 117.57,-199.04 114.07,-209.04 121.07,-209.04\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"117.57\" cy=\"-106.5\" rx=\"74.89\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"117.57\" y=\"-101.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">for (i=0;i&lt;0;i++)</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M117.57,-161.31C117.57,-153.73 117.57,-144.6 117.57,-136.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"121.07,-136.04 117.57,-126.04 114.07,-136.04 121.07,-136.04\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"82.57\" cy=\"-18\" rx=\"82.57\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"82.57\" y=\"-12.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Plot Sinx and Cosx</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M96.4,-88.99C91.14,-83.7 86.2,-77.41 83.32,-70.5 80.39,-63.46 79.33,-55.39 79.22,-47.76\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"82.71,-48 79.63,-37.86 75.72,-47.71 82.71,-48\"/>\n",
       "<text text-anchor=\"middle\" x=\"93.45\" y=\"-57.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"210.57\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"210.57\" y=\"-12.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">End</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>3&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M135.5,-88.82C150.2,-75.15 171.11,-55.7 187.13,-40.8\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"189.41,-43.46 194.35,-34.08 184.65,-38.33 189.41,-43.46\"/>\n",
       "<text text-anchor=\"middle\" x=\"180.65\" y=\"-57.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;3 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M94.24,-36.3C97.58,-41.8 101.02,-48 103.57,-54 106.71,-61.36 109.32,-69.61 111.41,-77.32\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"107.99,-78.08 113.8,-86.94 114.78,-76.39 107.99,-78.08\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x26fd8a8cfd0>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "''' import graphviz as viz\n",
    "viz.Digraph() '''\n",
    "from graphviz import Digraph\n",
    "dot = Digraph()\n",
    "dot.node('1','Start')\n",
    "dot.node('2','Input=>X')\n",
    "dot.node('3','for (i=0;i<0;i++)')\n",
    "dot.node('4','Plot Sinx and Cosx')\n",
    "dot.node('5','End')\n",
    "dot.edge('1','2')\n",
    "dot.edge('2','3')\n",
    "dot.edge('3','4',label='Yes')\n",
    "dot.edge('3','5',label='No')\n",
    "dot.edge('4','3')\n",
    "\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        1         \n",
      "       1 1        \n",
      "      1 2 1       \n",
      "     1 3 3 1      \n",
      "    1 4 6 4 1     \n",
      "  1 5 10 10 5 1   \n",
      " 1 6 15 20 15 6 1 \n",
      "1 7 21 35 35 21 7 1\n",
      "1 8 28 56 70 56 28 8 1\n"
     ]
    }
   ],
   "source": [
    "def generate_pascals_triangle(num_rows):\n",
    "    if num_rows <= 0:\n",
    "        return []\n",
    "    \n",
    "    triangle = [[1]]\n",
    "    \n",
    "    for i in range(1, num_rows):\n",
    "        row = [1]\n",
    "        for j in range(1, i):\n",
    "            row.append(triangle[i-1][j-1] + triangle[i-1][j])\n",
    "        row.append(1)\n",
    "        triangle.append(row)\n",
    "    \n",
    "    return triangle\n",
    "\n",
    "def print_pascals_triangle(triangle):\n",
    "    for row in triangle:\n",
    "        print(' '.join(map(str, row)).center(len(triangle[-1])*2))\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    num_rows = int(input(\"请输入杨辉三角形的行数: \"))\n",
    "    triangle = generate_pascals_triangle(num_rows)\n",
    "    print_pascals_triangle(triangle)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              *\n",
      "             ***\n",
      "            *****\n",
      "           *******\n",
      "          *********\n",
      "         ***********\n",
      "        *************\n",
      "       ***************\n",
      "      *****************\n",
      "     *******************\n",
      "    *********************\n",
      "   ***********************\n",
      "  *************************\n",
      " ***************************\n",
      "*****************************\n",
      "     |||||\n",
      "     |||||\n",
      "     |||||\n"
     ]
    }
   ],
   "source": [
    "def print_christmas_tree(height):\n",
    "    # 打印树冠部分\n",
    "    for i in range(height):\n",
    "        print(' ' * (height - i - 1) + '*' * (2 * i + 1))\n",
    "    \n",
    "    # 打印树干部分\n",
    "    trunk_width = height // 3 if height > 3 else 1\n",
    "    trunk_height = height // 4 if height > 4 else 1\n",
    "    trunk_space = (height - trunk_width) // 2\n",
    "    \n",
    "    for _ in range(trunk_height):\n",
    "        print(' ' * trunk_space + '|' * trunk_width)\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    tree_height = int(input(\"请输入圣诞树的高度: \"))\n",
    "    print_christmas_tree(tree_height)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "你的等级是: F\n"
     ]
    }
   ],
   "source": [
    "def determine_grade(score):\n",
    "     if score >= 90:\n",
    "         return 'A'\n",
    "     elif score >= 80:\n",
    "         return 'B'\n",
    "     elif score >= 70:\n",
    "         return 'C'\n",
    "     elif score >= 60:\n",
    "         return 'D'\n",
    "     else:\n",
    "         return 'F'\n",
    "\n",
    "def main():\n",
    "    try:\n",
    "         score = float(input(\"请输入成绩（0-100）: \"))\n",
    "         if not 0 <= score <= 100:\n",
    "             print(\"成绩必须在0到100之间。\")\n",
    "         else:\n",
    "            grade = determine_grade(score)\n",
    "            print(f\"你的等级是: {grade}\")\n",
    "    except ValueError:\n",
    "        print(\"请输入一个有效的数字。\")\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 分支结构 Pages: 1 -->\n",
       "<svg width=\"436pt\" height=\"676pt\"\n",
       " viewBox=\"0.00 0.00 436.02 675.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 671.5)\">\n",
       "<title>分支结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-671.5 432.02,-671.5 432.02,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"331.01,-667.5 277.01,-667.5 277.01,-631.5 331.01,-631.5 331.01,-667.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-643.33\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">开始</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"420.58,-594.5 235.15,-594.5 187.45,-558.5 372.87,-558.5 420.58,-594.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-571.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">请输入成绩=?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-631.31C304.01,-623.73 304.01,-614.6 304.01,-606.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-606.04 304.01,-596.04 300.51,-606.04 307.51,-606.04\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"304.01,-521.5 180,-503.5 304.01,-485.5 428.02,-503.5 304.01,-521.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-498.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于90?</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-558.31C304.01,-550.73 304.01,-541.6 304.01,-533.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-533.04 304.01,-523.04 300.51,-533.04 307.51,-533.04\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"228.01,-433 104,-415 228.01,-397 352.02,-415 228.01,-433\"/>\n",
       "<text text-anchor=\"middle\" x=\"228.01\" y=\"-409.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于80?</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M290.42,-487.04C278.86,-473.87 262.07,-454.76 248.81,-439.67\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"251.71,-437.67 242.48,-432.47 246.45,-442.29 251.71,-437.67\"/>\n",
       "<text text-anchor=\"middle\" x=\"281.07\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- a -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>a</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"407.51,-379 352.51,-379 352.51,-343 407.51,-343 407.51,-379\"/>\n",
       "<text text-anchor=\"middle\" x=\"380.01\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print A</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;a -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>3&#45;&gt;a</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M319.74,-487.33C332.59,-474.11 350.32,-453.82 361.01,-433 367.82,-419.74 372.37,-403.8 375.3,-390.39\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"378.68,-391.36 377.19,-380.87 371.81,-390 378.68,-391.36\"/>\n",
       "<text text-anchor=\"middle\" x=\"359.23\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"175.01,-325 51,-307 175.01,-289 299.02,-307 175.01,-325\"/>\n",
       "<text text-anchor=\"middle\" x=\"175.01\" y=\"-301.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于70?</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M219.96,-397.9C211.56,-381.09 198.24,-354.45 188.27,-334.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"191.42,-332.98 183.81,-325.6 185.16,-336.11 191.42,-332.98\"/>\n",
       "<text text-anchor=\"middle\" x=\"217.61\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- b -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>b</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"356.51,-271 301.51,-271 301.51,-235 356.51,-235 356.51,-271\"/>\n",
       "<text text-anchor=\"middle\" x=\"329.01\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print B</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;b -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>4&#45;&gt;b</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M245.14,-399.3C263.23,-382.9 291.38,-354.74 308.01,-325 315.34,-311.9 320.35,-295.97 323.64,-282.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"327.01,-283.48 325.76,-272.96 320.18,-281.96 327.01,-283.48\"/>\n",
       "<text text-anchor=\"middle\" x=\"305.53\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"124.01,-217 0,-199 124.01,-181 248.02,-199 124.01,-217\"/>\n",
       "<text text-anchor=\"middle\" x=\"124.01\" y=\"-193.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于60?</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.27,-289.9C159.18,-273.09 146.36,-246.45 136.77,-226.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"139.98,-225.11 132.49,-217.61 133.67,-228.14 139.98,-225.11\"/>\n",
       "<text text-anchor=\"middle\" x=\"165.31\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- c -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>c</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.51,-163 248.51,-163 248.51,-127 303.51,-127 303.51,-163\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print C</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;c -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>5&#45;&gt;c</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M193.08,-291.18C211.77,-274.88 240.5,-247 257.01,-217 264.24,-203.86 268.84,-187.81 271.7,-174.3\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"275.09,-175.18 273.5,-164.71 268.21,-173.89 275.09,-175.18\"/>\n",
       "<text text-anchor=\"middle\" x=\"254.43\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- d -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>d</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"166.89,-109 111.14,-109 111.14,-73 166.89,-73 166.89,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"139.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print D</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;d -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>6&#45;&gt;d</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M126.42,-180.97C128.73,-164.69 132.24,-139.82 134.98,-120.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"138.41,-121.23 136.35,-110.84 131.48,-120.25 138.41,-121.23\"/>\n",
       "<text text-anchor=\"middle\" x=\"143.86\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- e -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>e</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"245.14,-109 190.89,-109 190.89,-73 245.14,-73 245.14,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"218.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print E</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;e -->\n",
       "<g id=\"edge15\" class=\"edge\">\n",
       "<title>6&#45;&gt;e</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M139.14,-182.89C145.12,-176.8 151.98,-169.65 158.01,-163 171.22,-148.43 185.45,-131.64 196.74,-118.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"199.4,-120.32 203.07,-110.38 194,-115.86 199.4,-120.32\"/>\n",
       "<text text-anchor=\"middle\" x=\"196.26\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.01,-36 249.01,-36 249.01,0 303.01,0 303.01,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-11.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">结束</text>\n",
       "</g>\n",
       "<!-- a&#45;&gt;7 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>a&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M378.7,-342.75C377.22,-321.79 375.01,-285.32 375.01,-254 375.01,-254 375.01,-254 375.01,-90 375.01,-58.72 341.98,-39.89 314.08,-29.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"315.35,-26.3 304.76,-26.38 313.09,-32.92 315.35,-26.3\"/>\n",
       "</g>\n",
       "<!-- b&#45;&gt;7 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>b&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M327.05,-234.9C324.14,-210.72 318.12,-165.22 310.01,-127 303.03,-94.09 300.72,-85.89 290.01,-54 289.25,-51.72 288.41,-49.38 287.55,-47.03\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"290.81,-45.77 283.93,-37.71 284.29,-48.3 290.81,-45.77\"/>\n",
       "</g>\n",
       "<!-- c&#45;&gt;7 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>c&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M276.01,-126.62C276.01,-106.19 276.01,-71.99 276.01,-47.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"279.51,-47.75 276.01,-37.75 272.51,-47.75 279.51,-47.75\"/>\n",
       "</g>\n",
       "<!-- d&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>d&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.07,-75.46C187.84,-64.7 216.34,-49.92 238.99,-38.19\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"240.32,-41.44 247.58,-33.73 237.1,-35.23 240.32,-41.44\"/>\n",
       "</g>\n",
       "<!-- e&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>e&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M232.05,-72.81C238.89,-64.44 247.26,-54.2 254.85,-44.9\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"257.53,-47.16 261.14,-37.2 252.11,-42.73 257.53,-47.16\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x26fd8a36b00>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape':'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','请输入成绩=?', shape='parallelogram')\n",
    "dot.node('3','x是否大等于90?', shape='diamond')\n",
    "dot.node('4','x是否大等于80?', shape='diamond')\n",
    "dot.node('5','x是否大等于70?', shape='diamond')\n",
    "dot.node('6','x是否大等于60?', shape='diamond')\n",
    "dot.node('a','Print A')\n",
    "dot.node('b','Print B')\n",
    "dot.node('c','Print C')\n",
    "dot.node('d','Print D')\n",
    "dot.node('e','Print E')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','a7','b7','c7','d7','e7'])\n",
    "dot.edge('3','a',label='Yes')\n",
    "dot.edge('3','4',label='No')\n",
    "dot.edge('4','b',label='Yes')\n",
    "dot.edge('4','5',label='No')\n",
    "dot.edge('5','c',label='Yes')\n",
    "dot.edge('5','6',label='No')\n",
    "dot.edge('6','d',label='Yes')\n",
    "dot.edge('6','e',label='No')\n",
    "dot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 3.4250000000000003\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 顺序结构 Pages: 1 -->\n",
       "<svg width=\"214pt\" height=\"476pt\"\n",
       " viewBox=\"0.00 0.00 214.11 476.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
       "<title>顺序结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-472 210.11,-472 210.11,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-468 76.06,-468 76.06,-432 130.06,-432 130.06,-468\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-444.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"206.11,-396 42.17,-396 0,-360 163.94,-360 206.11,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-372.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">input Radius =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-431.7C103.06,-424.41 103.06,-415.73 103.06,-407.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-407.62 103.06,-397.62 99.56,-407.62 106.56,-407.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"144.81,-324 61.31,-324 61.31,-288 144.81,-288 144.81,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-300.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print Radius</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-359.7C103.06,-352.41 103.06,-343.73 103.06,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-335.62 103.06,-325.62 99.56,-335.62 106.56,-335.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"154.93,-252 51.18,-252 51.18,-216 154.93,-216 154.93,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-228.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating Area</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-287.7C103.06,-280.41 103.06,-271.73 103.06,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-263.62 103.06,-253.62 99.56,-263.62 106.56,-263.62\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"168.43,-180 37.68,-180 37.68,-144 168.43,-144 168.43,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating perimeter</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-215.7C103.06,-208.41 103.06,-199.73 103.06,-191.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-191.62 103.06,-181.62 99.56,-191.62 106.56,-191.62\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-108 76.06,-108 76.06,-72 130.06,-72 130.06,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-84.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">print</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-143.7C103.06,-136.41 103.06,-127.73 103.06,-119.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-119.62 103.06,-109.62 99.56,-119.62 106.56,-119.62\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-36 76.06,-36 76.06,0 130.06,0 130.06,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-12.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">end</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-71.7C103.06,-64.41 103.06,-55.73 103.06,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-47.62 103.06,-37.62 99.56,-47.62 106.56,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x26fd8a8cee0>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 15\n",
      "面积和周长: 706.8375000000001 94.245\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 分支结构 Pages: 1 -->\n",
       "<svg width=\"420pt\" height=\"404pt\"\n",
       " viewBox=\"0.00 0.00 419.60 404.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 400)\">\n",
       "<title>分支结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-400 415.6,-400 415.6,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"232.8,-396 178.8,-396 178.8,-360 232.8,-360 232.8,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-371.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">开始</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"347.88,-324 121.87,-324 63.72,-288 289.74,-288 347.88,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-300.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">输入Real Number =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-359.7C205.8,-352.41 205.8,-343.73 205.8,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-335.62 205.8,-325.62 202.3,-335.62 209.3,-335.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"205.8,-252 0,-234 205.8,-216 411.6,-234 205.8,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-228.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">判断RealNumber是否大于0？</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-287.7C205.8,-280.41 205.8,-271.73 205.8,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-263.62 205.8,-253.62 202.3,-263.62 209.3,-263.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"195.68,-180 31.93,-180 31.93,-144 195.68,-144 195.68,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"113.8\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">RealNumber=RealNumber</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M185.38,-217.46C173.69,-208.56 158.75,-197.2 145.55,-187.16\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"148.03,-184.65 137.96,-181.38 143.79,-190.22 148.03,-184.65\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"381.93,-180 213.68,-180 213.68,-144 381.93,-144 381.93,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"297.8\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">RealNumber=&#45;RealNumber</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>3&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M226.22,-217.46C237.92,-208.56 252.86,-197.2 266.05,-187.16\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"267.81,-190.22 273.65,-181.38 263.57,-184.65 267.81,-190.22\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"301.15,-108 149.47,-108 110.45,-72 262.13,-72 301.15,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-83.83\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">输出绝对值</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M136.54,-143.7C147.82,-135.11 161.63,-124.61 173.95,-115.24\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"175.96,-118.1 181.8,-109.26 171.72,-112.53 175.96,-118.1\"/>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M275.06,-143.7C263.78,-135.11 249.97,-124.61 237.66,-115.24\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"239.88,-112.53 229.81,-109.26 235.64,-118.1 239.88,-112.53\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"232.8,-36 178.8,-36 178.8,0 232.8,0 232.8,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-11.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">结束</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-71.7C205.8,-64.41 205.8,-55.73 205.8,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-47.62 205.8,-37.62 202.3,-47.62 209.3,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x26fd8a8c670>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 55\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "例题：求解阶乘Q！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "'str' object has no attribute 'S'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[19], line 7\u001b[0m\n\u001b[0;32m      5\u001b[0m     S \u001b[38;5;241m=\u001b[39m S \u001b[38;5;241m*\u001b[39m i\n\u001b[0;32m      6\u001b[0m     i \u001b[38;5;241m=\u001b[39m i \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m----> 7\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m阶乘Q！\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mS\u001b[49m)\n",
      "\u001b[1;31mAttributeError\u001b[0m: 'str' object has no attribute 'S'"
     ]
    }
   ],
   "source": [
    "Q = 5\n",
    "i = 1\n",
    "\n",
    "while (i<=Q):\n",
    "    S = S * i\n",
    "    i = i + 1\n",
    "print('阶乘Q！'.S)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                    \n",
      "                                                                                                    \n",
      "                          .a8@@%d}\\L@@$$,                      `rB%$8f1uW$$B$                       \n",
      "                        @$&             '0@8@@B$$$$$$$$$$8B@<@$ .            '@B                    \n",
      "                       .B%       `w$%8'                         . 8B@$c.       $$.                  \n",
      "                        ~$$ .'$$k                                      w@$o  ;$$                    \n",
      "                           :@8             ` `'           ^'' .           t$W                       \n",
      "                          $$.           .<@$$$           '?$$$B`            $$                      \n",
      "                         $$                .c$.`x$@adk$<.  \"$(               $B                     \n",
      "                         $p              .$.     }@@@M^ .      $             $$`                    \n",
      "                        . @#             '$}                  fL           .}BI                     \n",
      "                           `$B;              _$w  ..     `M@`           .'$$)                       \n",
      "                                d$%a..                            .. *$8+.                          \n",
      "                                       .:$$@@%$$%B**hkkk8@$$$$@$v; .                                \n",
      "                                  ,v$$m?$$                   ..@@ $$B'.                             \n",
      "                              '`8@U.   8$                      ,$%   \"B$,'                          \n",
      "                           ..%$J.     $$:                       m$,     W8$                         \n",
      "                          ^@@.        $@:                        @$.      ?@@.                      \n",
      "                          .m$@:``u88B ,$?                        @$@$` .   $$^                      \n",
      "                                      .h$!                      %$.  ...''.                         \n",
      "                                        .$$@$~.           ;X$$B$c                                   \n",
      "                                       ,$$      l$$   'BB.      $$.                                 \n",
      "                                       $$l.     ^@B.   @$'      p$                                  \n",
      "                                        @@Q      x$1 .$@\"    ..$$$                                  \n",
      "                                                                                                    \n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 25\n",
    "show_width = 100\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "\n",
    "pic = plt.imread(\".\\\\R-C.jpeg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.10"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
